package cn.tedu._04mybatis.mapper;

import cn.tedu._04mybatis.pojo.entity.Weibo;
import cn.tedu._04mybatis.pojo.vo.*;
import org.apache.ibatis.annotations.*;

import java.util.List;

@Mapper
public interface WeiboMapper {
    /**
     * 1.在微博表中插入数据
     * @param weibo 微博对象实体类
     * @return 受影响的数据行数
     */
    //@Insert("INSERT INTO weibo (content,created,user_id) VALUES (#{content},#{created},#{userId}) ")
    int insertWeibo(Weibo weibo);//增删改-返回值为int类型 表示受影响的数据条数

    /**
     * 2.删除微博评论: 根据微博ID删除
     * @param id 微博id
     * @return 受影响的数据行数
     */
    //@Delete("DELETE FROM weibo WHERE id = #{id}")
    int deleteWeiboById(Long id);

    /**
     * 3.更改微博评论相关信息 根据微博ID更改
     * @param weibo 微博对象实体类
     * @return 受影响的数据行数
     */
    //@Update("UPDATE weibo SET content=#{content},created=#{created},user_id=#{userId} WHERE id=#{id}")
    int updateWeiboById(Weibo weibo);

    /**
     * 4.单条数据全字段查询: 根据微博id查询该条数据的所有信息
     *   当查询字段名和属性名不一致时 需要使用别名 否则会被赋为默认(NULL)值
     * @param id 微博id
     * @return 微博实体类 通过映射给属性赋值 并输出
     */
    //@Select("SELECT id,content,created,user_id userId FROM weibo WHERE id=#{id}")
    Weibo selectWeiboById(Long id);

    /**
     * 5.多条数据全字段查询: 查询微博表中所有的信息
     *   需要将结果集放入集合 若直接用Weibo对象接收 会显示TooManyResultsException异常
     */
    //@Select("SELECT id,content,created,user_id userId FROM weibo")
    List<Weibo> selectWeibo();

    /**
     * 6.单条数据部分字段查询
     */
    //@Select("SELECT content,created FROM weibo WHERE id=#{id}")
    WeiboVO1 selectWeiboVO1ById(Long id);

    /**
     * 7.根据微博id 动态修改微博信息
     * @param weibo 微博对象实体类
     * @return int
     */
    int dynamicUpdateWeibo(Weibo weibo);

    /**
     * 8.数组方式动态删除: 根据id动态删除
     */
    int deleteByIds1(Long[] ids);

    /**
     * 9.集合方式动态删除: 根据id动态删除
     */
    int deleteByIds2(List<Long> ids);

    /**
     * 10.统计微博表中的表记录条数
     */
    int selectWeiboCount();

    /**
     * 11.ResultMap单表: 根据微博id查询该条微博的 id,微博内容,用户id
     */
    ResultMapVO1 selectWeiboVO1ById1(Long id);

    /**
     * 12.ResultMap多表: 查询指定用户发布的所有微博信息,用户id,用户昵称,微博集合
     */
    ResultMapVO2 selectWeiboVO2ById2(Long uid);

    /**
     * 13.获取指定微博的所有评论信息 要求:1.微博id 2.微博内容 3.评论的集合List<Comment>
     */
    ResultMapVO3 selectWeiboVO3ById3(Long wid);

    /**
     * 14.ResultMap多表+VO类获取部分信息
     */
    ResultMapVO4 selectWeiboVO4ById4(Long wid);
}
